草庐IT

Java Iterator(迭代器)

全部标签

java - 故障安全迭代器的逻辑是什么?

如果故障安全迭代器创建一个单独的副本并对其进行处理,它怎么会知道对原始副本所做的任何更改?publicclassconcurrentHashMap{publicstaticvoidmain(String[]args)throwsInterruptedException{MapCheckobj1=newMapCheck();Threadt1=newThread(newRunnable(){@Overridepublicvoidrun(){obj1.put();}});Threadt2=newThread(newRunnable(){@Overridepublicvoidrun(){obj

java - 单次迭代 => 从 Java 到 Scala 的多个输出集合

我目前正在尝试将一些Java代码转换为Scala代码。挑战在于确保与原始Java代码相比,转换后的Scala代码最终不会做一些非常低效的事情。例如尝试转换以下代码时:classPerson{Stringname;Integerage;Charactergender;}publicclassTestJava{publicstaticvoidmain(String[]args){finalListpersons=newArrayList();finalListmales=newArrayList();finalListaNames=newArrayList();finalListsenio

java - 为什么 BitSet 不可迭代?

BitSet有一个stream()方法,但它不像其他提供此方法的类型那样实现Iterable接口(interface)。这有什么具体原因吗? 最佳答案 Iterable中的方法(foreach、iterator和spliterator)都没有在中提供>位集。Iterable中没有stream()方法。此外,BitSet的stream()方法不返回位集位上的流,而是返回位集的索引上的流设置值的位(这有点令人困惑TBH)。因此,从技术上讲,这似乎与Iterable几乎没有任何共同之处。 关于

java - 如何在迭代时删除和添加元素到 TreeMap?

我想写这样的代码-for(Map.Entrye:map.entrySet()){map.remove(k);map.put(x,value);}但是我得到了java.util.ConcurrentModificationException我也尝试使用Iterator但我得到了相同的Exception 最佳答案 解释为什么会导致ConcurrentModificationExceptionmap.remove(k);map.put(x,value);for-each循环还在内部创建map的entrySet的迭代器。在遍历map时,您通

java - 为什么 static final 在每次迭代中都比 new 慢

为什么代码片段A比代码片段B慢14倍?(在Windows764位上使用jdk1.8.0_60测试)代码片段A:importjava.awt.geom.RoundRectangle2D;publicclassTest{privatestaticfinalRoundRectangle2D.DoubleRECTANGLE=newRoundRectangle2D.Double(1,2,3,4,5,6);publicstaticvoidmain(String[]args){intresult=RECTANGLE.hashCode();longstart=System.nanoTime();for

java - 一个迭代器,它改变并返回相同的对象。不好的做法?

我正在编写GC友好代码来读取并返回给用户一系列byte[]消息。在内部我重复使用相同的ByteBuffer这意味着我将重复返回相同的byte[]大部分时间。我正在考虑编写警告性javadoc并将其作为Iterator公开给用户.据我所知,它不会违反Iterator契约(Contract),但如果他们这样做,用户肯定会感到惊讶Lists.newArrayList(myIterator)并取回List填充了相同的byte[]在每个位置!问题:对于一个可能变异并返回相同对象的类来实现Iterator是否是不良做法界面?如果是这样,最好的选择是什么?“不要改变/重复使用你的对象”是一个简单的答

java - 实例和迭代。哪一个更好?

我想阅读文档并处理它们。每次迭代处理一个文档。哪种代码比较好?1.BufferedReaderbr;for(Filef:files){br=newBufferedReader(......);......}2.for(Filef:files){BufferedReaderbr=newBufferedReader(......);......}我的观点是哪一个在空间和速度方面更有效率? 最佳答案 在我看来,后者更为清晰。通常,更喜欢声明具有最小作用域的局部变量,理想情况下在声明时初始化它们。它不会直接影响性能-但会影响可读性和维护性,

java - 如何使用 Java 8 流迭代 x 次?

这个问题在这里已经有了答案:IsitpossibletouseStreams.intRangefunction?(3个答案)关闭6年前。我有一个老式的for循环来做一些负载测试:For(inti=0;i如何在没有for的情况下使用新的Java8流API来执行此操作?此外,流的使用使得切换到并行流变得容易。如何切换到并行流?*我想保留对i的引用。

java - 我如何反向迭代 ArrayDeque?

如何反向迭代ArrayDeque?我通常会对数组执行此操作,但它不可索引。for(inti=delegate.size()-1;i>=0;i--){}谢谢 最佳答案 您可以使用方法descendingIterator()得到迭代ArrayDeque的迭代器反过来。Iteratorit=arrayDeque.descendingIterator();while(it.hasNext()){//dosomethingwithit.next()} 关于java-我如何反向迭代ArrayDequ

java - 如何确定 ArrayList 迭代器接下来将返回的对象类型?

我有一个ArrayList,我正在使用一个迭代器来遍历它。我需要找出下一个对象的类型:IteratorvehicleIterator=vehicleArrayList.iterator();while(vehicleIterator.hasNext()){//HowdoIfindthetypeofobjectinthearraylistatthispoint//forexample,isitacar,busetc...}谢谢 最佳答案 Objecto=vehicleIterator.next();if(oinstanceofCar)